interface IStructure {
  /** 判断栈是否为空  */
  isEmpty(): boolean
  /** 清空栈  */
  clear(): void
  /** 获取栈的大小  */
  get size(): number
}

/**
 * @author hzq
 * @description 栈接口
 * @date 2024-11-03
 */
export interface IStack<T> extends IStructure {
  /** 向栈中添加元素  */
  push(item: T): number
  /** 从栈中移除并返回栈顶元素  */
  pop(): T | undefined
  /** 返回栈顶元素但不移除  */
  peek(): T | undefined
}

/**
 * @author hzq
 * @description 队列接口
 * @date 2024-11-03
 */
export interface IQueue<T> extends IStructure {
  /** 向队列中添加元素  */
  enqueue(item: T): number
  /** 从队列中移除并返回队首元素  */
  dequeue(): T | undefined
  /** 返回队首元素但不移除  */
  font(): T | undefined
}

export interface IStructureItem<T> {
  [key: string]: T
}

/**
 * @author hzq
 * @description 任务队列接口
 * @date 2024-11-03
 */
export type ITask<T> = {
  // 可选的字符串类型
  name?: string
  // 返回Promise类型的函数
  func: () => Promise<T>
}
